using System;
using System.Collections.Generic;
using System.Text;
using EntidadesTO;
using System.Data;
using System.Data.SqlClient;

namespace AccesoDatos
{
    public class InfoPredioDA
    {
        public void GuardarNuevo(InfoPredioTO pInfoPredio)
        {
            
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {
                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_ins_SEC_InfoPredio", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pNumJurada", pInfoPredio.NumJurada);
                comando.Parameters.AddWithValue("@pPorcentajeParticipacion", pInfoPredio.PorcentajeParticipacion);
                comando.Parameters.AddWithValue("@pAreaTotalTerreno", pInfoPredio.AreaTotalTerreno);
                comando.Parameters.AddWithValue("@pAreaConstruidaTerreno", pInfoPredio.AreaConstruidaTerreno);
                comando.Parameters.AddWithValue("@pFechaInscripcion", pInfoPredio.FechaInscripcion);
                comando.Parameters.AddWithValue("@pValorPredio", pInfoPredio.ValorPredio);
                comando.Parameters.AddWithValue("@pCodCondicion", pInfoPredio.CodCondicion);
                comando.Parameters.AddWithValue("@pCodUsoPredio", pInfoPredio.CodUsoPredio);
                comando.Parameters.AddWithValue("@pCodEstadoPredio", pInfoPredio.CodEstadoPredio);
                comando.Parameters.AddWithValue("@pCodTipoPredio", pInfoPredio.CodTipoPredio);
                comando.Parameters.AddWithValue("@pCodPredio", pInfoPredio.CodPredio);

                comando.CommandType = CommandType.StoredProcedure;

                comando.ExecuteNonQuery();

                instanciaConexion.CerrarConexion();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }
        }

        public List<InfoPredioTO> BuscarInfoPredioLlave(int numJurada)
        {
            List<InfoPredioTO> listaInfoPredio = new List<InfoPredioTO>();
            SqlDataReader reader = null;
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {

                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_get_SEC_InfoPredio_key", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pNumJurada", numJurada);

                comando.CommandType = CommandType.StoredProcedure;

                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    InfoPredioTO infoPredioTO = new InfoPredioTO();
                    infoPredioTO.PorcentajeParticipacion = reader.GetDecimal(reader.GetOrdinal("porcentajeParticipacion"));
                    infoPredioTO.AreaTotalTerreno = reader.GetDecimal(reader.GetOrdinal("areaTotalTerreno"));
                    infoPredioTO.AreaConstruidaTerreno = reader.GetDecimal(reader.GetOrdinal("areaConstruidaTerreno"));
                    infoPredioTO.FechaInscripcion = reader.GetDateTime(reader.GetOrdinal("fechaInscripcion"));
                    infoPredioTO.ValorPredio = reader.GetDecimal(reader.GetOrdinal("valorPredio"));
                    infoPredioTO.CodCondicion = reader.GetInt32(reader.GetOrdinal("codCondicion"));
                    infoPredioTO.CodUsoPredio = reader.GetInt32(reader.GetOrdinal("codUsoPredio"));
                    infoPredioTO.CodEstadoPredio = reader.GetInt32(reader.GetOrdinal("codEstadoPredio"));
                    infoPredioTO.CodTipoPredio = reader.GetInt32(reader.GetOrdinal("codTipoPredio"));
                    infoPredioTO.NumJurada = reader.GetInt32(reader.GetOrdinal("numJurada"));
                    infoPredioTO.CodPredio = reader.GetInt32(reader.GetOrdinal("codPredio"));

                    listaInfoPredio.Add(infoPredioTO);
                }

                reader.Close();
                instanciaConexion.CerrarConexion();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                listaInfoPredio = null;

            }
            finally
            {
                if (reader != null)
                {
                    if (reader.IsClosed == false)
                        reader.Close();
                }
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }

            return listaInfoPredio;

        }

        public void Modificar(InfoPredioTO pInfoPredio)
        {
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {
                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_upd_SEC_InfoPredio", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pNumJurada", pInfoPredio.NumJurada);
                comando.Parameters.AddWithValue("@pPorcentajeParticipacion", pInfoPredio.PorcentajeParticipacion);
                comando.Parameters.AddWithValue("@pAreaTotalTerreno", pInfoPredio.AreaTotalTerreno);
                comando.Parameters.AddWithValue("@pAreaConstruidaTerreno", pInfoPredio.AreaConstruidaTerreno);
                comando.Parameters.AddWithValue("@pFechaInscripcion", pInfoPredio.FechaInscripcion);
                comando.Parameters.AddWithValue("@pValorPredio", pInfoPredio.ValorPredio);
                comando.Parameters.AddWithValue("@pCodCondicion", pInfoPredio.CodCondicion);
                comando.Parameters.AddWithValue("@pCodUsoPredio", pInfoPredio.CodUsoPredio);
                comando.Parameters.AddWithValue("@pCodEstadoPredio", pInfoPredio.CodEstadoPredio);
                comando.Parameters.AddWithValue("@pCodTipoPredio", pInfoPredio.CodTipoPredio);
                comando.Parameters.AddWithValue("@pCodPredio", pInfoPredio.CodPredio);

                comando.CommandType = CommandType.StoredProcedure;
                comando.ExecuteNonQuery();

                instanciaConexion.CerrarConexion();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }
        }
    }
}
